home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
-
- int f[3][3];
- int bi,bj;
- char buf[4];
-
- main()
- {
- int i,j,w,amzug,zug;
- for(i=0;i<3;++i)
- for(j=0;j<3;j++)
- f[i][j]=0;
-
- printf("Darf ich anfangen (j/n)? ");
- scanf("%2s",buf);
- if(*buf=='j'||*buf=='J') amzug=1; else amzug=0;
-
- zug=0;printfield();
-
- while(1){
- bi=bj=4;
- zug++;if(zug>9){printf("Unentschieden\n");exit(0);}
- if(w=win()){
- if(w>0){printf("Ich habe gewonnen\n");exit(0);}
- else {printf("Sie haben gewonnen, das darf nicht sein!\n");}
- }
- if(amzug){
- if(zug>1) w=rek(0); else {w=0;bi=bj=1;}
- printf("Ich setze auf (%d,%d)\n",bi+1,bj+1);
- f[bi][bj]=1;
- if(w&&zug<9) printf("Und werde gewinnen\n");
- }else{
- while(bi<1||bi>3||bj<1||bj>3||f[bi-1][bj-1]){
- printf("Ihr Zug (x,y): ");
- scanf("%d,%d",&bj,&bi);
- }
- f[bi-1][bj-1]=-1;
- }
- printfield();
- amzug=1-amzug;
- }
- }
- rek(t)
- int t;
- {
- int i,j,z,bw,w,s;
- z=0;
- w=win(); if(w!=0) return(w);
- if(t&1) s=-1; else s=1;
- bw=-s;
- for(i=0;i<3;i++){
- for(j=0;j<3;j++){
- if(f[i][j]==0){
- z=1; f[i][j]=s;
- w=rek(t+1);
- if((w>=bw&&s==1)||(w<=bw&&s==-1)){
- bw=w;
- if(t==0) {bi=i;bj=j;}
- if(bw==s) {f[i][j]=0;return(bw);}
- }
- f[i][j]=0;
- }
- }
- }
- if(z==0) {bw=win();}
- return(bw);
- }
-
- win()
- {
- int i;
- for(i=0;i<3;i++){
- if(f[i][0]==1&&f[i][1]==1&&f[i][2]==1) return(1);
- if(f[i][0]==-1&&f[i][1]==-1&&f[i][2]==-1) return(-1);
- if(f[0][i]==1&&f[1][i]==1&&f[2][i]==1) return(1);
- if(f[0][i]==-1&&f[1][i]==-1&&f[2][i]==-1) return(-1);
- }
- if(f[0][0]==1&&f[1][1]==1&&f[2][2]==1) return(1);
- if(f[0][0]==-1&&f[1][1]==-1&&f[2][2]==-1) return(-1);
- if(f[0][2]==1&&f[1][1]==1&&f[2][0]==1) return(1);
- if(f[0][2]==-1&&f[1][1]==-1&&f[2][0]==-1) return(-1);
- return(0);
- }
- printfield()
- {
- int i,j;
- for(i=0;i<3;++i){
- printf("%1d",i+1);
- for(j=0;j<3;j++){
- if(f[i][j]==1) printf("|X"); else{
- if(f[i][j]==-1) printf("|O"); else printf("| ");}
- }
- printf("|\n -------\n");
- }
- printf(" 1 2 3\n");
-
- }
-
-
-